/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.faesa.acervo.view.mbeans;

import br.faesa.acervo.business.ejb.AlunoServiceRemote;
import br.faesa.acervo.business.ejb.ReservaServiceRemote;
import br.faesa.acervo.business.ejb.Servicos;
import br.faesa.acervo.business.ejb.to.AlunoTO;
import br.faesa.acervo.exception.CreateReservaException;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author aluno.faesa
 */
@ManagedBean(name = "emprestimoCadastroForm")
@ViewScoped
public class EmprestimoCadastroFormBean implements Serializable {

    private Long matricula;
    
    private Long idLivro;
    
    private Date dtEmprestimo;
    
    private Date dtDevolucao;
    
    public EmprestimoCadastroFormBean() { }
    
    @PostConstruct
    public void init()
    {
        
        final String SELECTED_ID = "idLivro";
        
        Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        
        
        if(paramMap.get(SELECTED_ID) != null){
            
            idLivro = Long.valueOf(paramMap.get(SELECTED_ID));
            
        }else{
            FacesUtils.fatal("Acesse a página a partir da seleção de um Livro!");
        }
        
    }
    
    public String onBotaoOKClick()
    {
        boolean erro = false;

        AlunoServiceRemote alunoService = Servicos.lookupEJBAluno();
        
        AlunoTO alunoTO = alunoService.obterPorMatricula(matricula);
        
        if(alunoTO == null){
            FacesUtils.error("Matrícula informada não encontrada");
            erro = true;
        }
        
        ReservaServiceRemote reservaService = Servicos.lookupEJBReserva();
        
        try {
            
            reservaService.setDtEmprestimo(dtEmprestimo);
            reservaService.setDtDevolucao(dtDevolucao);
            reservaService.setIdLivro(idLivro);
            reservaService.setMatricula(this.matricula);
            reservaService.validarPeriodoReserva();
            reservaService.salvar();
            
        } catch (CreateReservaException ex) {
            FacesUtils.error(ex.getMessage());
            erro = true;
        }
        
        if(erro){
            return null;
        }
        
        
        FacesUtils.info("Reserva efetuada com sucesso!");
        
        return "/livroConsultaForm.xhtml";
    }
    
    public Long getMatricula() {
        return matricula;
    }

    public Long getIdLivro() {
        return idLivro;
    }

    public void setIdLivro(Long idLivro) {
        this.idLivro = idLivro;
    }

    public Date getDtEmprestimo() {
        return dtEmprestimo;
    }

    public void setDtEmprestimo(Date dtEmprestimo) {
        this.dtEmprestimo = dtEmprestimo;
    }

    public Date getDtDevolucao() {
        return dtDevolucao;
    }

    public void setDtDevolucao(Date dtDevolucao) {
        this.dtDevolucao = dtDevolucao;
    }
    
    

    public void setMatricula(Long matricula) {
        this.matricula = matricula;
    }

}
